package com.yty.demo._10_annotation;

import java.lang.annotation.*;

/**
 * 1.访问修饰符必须为public，不写默认为public；
 * 2.该元素的类型只能是基本数据类型、String、Class、枚举类型、注解类型（体现了注解的嵌套效果）以及上述类型的一位数组；
 * 3.该元素的名称一般定义为名词，如果注解中只有一个元素，请把名字起为value（后面使用会带来便利操作）；
 * 4.()不是定义方法参数的地方，也不能在括号中定义任何参数，仅仅只是一个特殊的语法；
 * 5.default代表默认值，值必须和第2点定义的类型一致；
 * 6.如果没有默认值，代表后续使用注解时必须给该类型元素赋值。
 *
 * 即又有属性的特征（可以赋值）,又有方法的特征（打上了一对括号）
 */

//注解的生命周期有三个阶段：1、Java源文件阶段；2、编译到class文件阶段；3、运行期阶段。
// 默认的情况下，自定义注解是使用的RetentionPolicy.CLASS
@Retention(RetentionPolicy.RUNTIME)
//限定某个自定义注解能够被应用在哪些Java元素上面的
@Target(value = {ElementType.TYPE})
//指定自定义注解是否能随着被定义的java文件生成到JavaDoc文档
@Documented
public @interface AnnotationTest {
    public String name();
    int age() default 18;
    int[] array();
}
